package com.itheima.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.constant.MessageConstant;
import com.itheima.entity.YddTag;
import com.itheima.exception.TagNameExistException;
import com.itheima.mapper.TagMapper;
import com.itheima.service.TagService;
import com.itheima.vo.PageInfoVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

@Service
@RequiredArgsConstructor
public class TagServiceImpl implements TagService {
    private final TagMapper tagMapper;

    /**
     * 分页
     *
     * @param page
     * @param limit
     * @param tagname
     * @return
     */
    @Override
    public PageInfoVO<YddTag> list(Integer page, Integer limit, String tagname) {
        //todo 1.开启
        PageHelper.startPage(page,limit);
        //todo 2.原始查询
        List<YddTag> yddTags = tagMapper.selectByTagname(tagname);
        //todo 3.数据转换
        PageInfo<YddTag> pageInfo = PageInfo.of(yddTags);
        //todo 4.封装结果返回
        PageInfoVO<YddTag> pageInfoVO = new PageInfoVO<>();
        pageInfoVO.setData(yddTags);
        pageInfoVO.setCurrentPage(pageInfo.getPageNum());
        pageInfoVO.setCount(pageInfo.getTotal());
        pageInfoVO.setPageSize(limit);
        pageInfoVO.setTotalPages(pageInfo.getPages());
        return pageInfoVO;
    }

    /**
     * 标签添加
     *
     * @param yddTag
     */
    @Override
    public void save(YddTag yddTag) {
        //todo 1.标签名不能重复
        Integer countTagename = tagMapper.selectCountCatename(yddTag.getTagname());
        if(countTagename>0){
            throw new TagNameExistException(MessageConstant.REPEAT_TAG_NAME);
        }
        //todo 2.添加
        yddTag.setDefaultData("1");
        tagMapper.insert(yddTag);
    }

    /**
     * 回显
     *
     * @param id
     * @return
     */
    @Override
    public YddTag rowInfo(Long id) {
        YddTag yddTag = tagMapper.selectById(id);
        return yddTag;
    }

    /**
     * 修改
     *
     * @param yddTag
     */
    @Override
    public void update(YddTag yddTag) {
        tagMapper.update(yddTag);
    }

    /**
     * 标签删除
     *
     * @param id
     */
    @Override
    public void delete(Long id) {
        //todo 1.ydd_article 表中含有标签即不能删除


        tagMapper.delete(id);
    }

    /**
     * 标签列表-全部
     *
     * @return {@link List}<{@link YddTag}>
     */
    @Override
    public List<YddTag> all() {
        List<YddTag> yddTags = tagMapper.selectAll();
        return yddTags;
    }

}
